import numpy as np
import image_io  # 假设用于图像读取
from image_utils import logging

def split_image_channels(image):
    '''
    该函数用于分割图像的颜色通道
    :param image: 输入图像，numpy数组
    :return: 图像的颜色通道列表
    '''
    try:
        logging.info("开始分割图像颜色通道")
        
        # 1. 检测图像是否为多通道图像，如果是，显示错误信息并返回
        if len(image.shape) < 3 or image.shape[2] < 2:
            raise ValueError("图像通道数必须大于等于2")
        
        # 2. 使用numpy的split函数，沿着通道维度分割图像
        channels = np.split(image, image.shape[2], axis=2)
        
        # 3. 去掉多余的维度并将分割后的通道图像添加到一个列表中
        channel_list = [np.squeeze(channel, axis=2) for channel in channels]
        
        logging.info(f"成功分割图像颜色通道")
        return channel_list
    except Exception as e:
        raise ValueError(f"在分割图像颜色通道时发生错误: {e}")


def merge_image_channels(file_paths):
    '''
    该函数用于合并多个单通道图像，创建一个多通道图像
    :param file_paths: 包含单通道图像文件路径的列表
    :return: 合并后的多通道图像
    '''
    try:
        logging.info("开始合并图像通道")
        
        # 1. 加载每个图像，并检查它们是否是单通道图像
        channels = []
        for path in file_paths:
            image = image_io.imread(path)  # 假设image_io中有imread方法读取图像
            if len(image.shape) != 2:  # 检查是否为单通道图像
                raise ValueError(f"要合并的子图像 {path} 不是单通道图像")
            channels.append(image)
        
        # 2. 使用 numpy.dstack 合并通道图像
        merged_image = np.dstack(channels)
        
        logging.info("成功合并图像通道")
        return merged_image
    except Exception as e:
        raise ValueError(f"在合并图像通道时发生错误: {e}")
